package com.minimalist.basic.config.fileHandler.handler;

import com.minimalist.common.entity.basic.po.MFile;
import com.minimalist.common.entity.basic.po.MStorage;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author 11987
 */
public interface FileHandler{

    /**
     * 是否是对应的处理类
     *
     * @param storageType 存储类型
     * @return 处理类
     */
    boolean isHandler(String storageType);

    /**
     * 参数校验
     *
     * @param storageConfig JSON存储配置信息
     * @return 格式化后的配置信息
     */
    String valid(String storageConfig);

    /**
     * 单文件上传
     *
     * @param multipartFile 文件
     * @param fileSource    文件来源
     * @param storage       存储信息
     * @return 文件信息
     */
    MFile uploadFile(MultipartFile multipartFile, Integer fileSource, MStorage storage);

    /**
     * 删除文件
     *
     * @param file    文件信息
     * @param storage 存储信息
     * @return 是否删除成功
     */
    boolean deleteFile(MFile file, MStorage storage);

    /**
     * 获取文件预览URL
     *
     * @param mFile   文件信息
     * @param storage 存储信息
     * @param expiry  过期时间
     * @return 预览URL
     */
    default String getPreviewUrl(MFile mFile, MStorage storage, Integer expiry){
        return null;
    }

    /**
     * 文件下载
     *
     * @param mFile    文件信息
     * @param storage  存储信息
     * @param response 响应信息
     */
    default void downloadFile(MFile mFile, MStorage storage, HttpServletResponse response){
    }

    /**
     * 本地文件上传
     *
     * @param fileName    文件名
     * @param newFileName 新文件名
     * @param fileSource  文件来源
     * @param storage     存储信息
     * @return 文件信息
     */
    default MFile uploadLocalFile(String fileName, String newFileName
            , Integer fileSource, MStorage storage){
        return null;
    }
}